A connection pool is a cache of connections maintained so that the connections can be reused when future requests are received. Connection pools are used to enhance the performance of executing commands. Opening and maintaining more connections than are actually needed is costly and wastes resources. In connection pooling, after a connection is created, it is placed in the pool and it is used over again so that a new connection does not have to be established. If all the connections are being used, a new connection is made and is added to the pool. In addition, connection pooling generally reduces the amount of time a user or application must wait to establish a new connection.